package com.tushen;

import org.gdal.gdal.Band;
import org.gdal.gdal.Dataset;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconst;
//import org.gdal.ogr.Driver;

import org.gdal.osr.SpatialReference;
import com.tushen.utils.Utils;

import java.io.File;


/**
 * dat 格式数据生成tif
 * create by likun on 2020/7/14 0014
 */
public class DataTask {

    // @param double[] argin  地理坐标 米转经纬度单位
    // 0:左上角x坐标 1:东西方向空间分辨率 2:x方向旋转角0° 3:左上角y坐标 4:y方向旋转角0° 5:南北方向空间分辨率
//    static  int width=450,height=600;//海南
//    static double[] argin = {105.5, 0.01, 0, 22, 0, -0.01};
    static  int width=480,height=400;//渤海
    static double[] argin = {117.57, 0.0098125, 0, 40.938, 0, -0.00966};



    public static void main(String[] args){
//        String txtArrayFile = "D:\\其他\\hesu\\polcon202004170900.dat";
//        double[][] txtArray = Utils.readTxtToArray(txtArrayFile);
//        int k=0;
//        for (int i=0;i<txtArray.length;i++){
//            for (int j=0;j<txtArray[i].length;j++){
//                if(txtArray[i][j]>0){
//                    k++;
//                    System.out.print(j+","+txtArray[i][j]+" ");
//                }
//            }
//            System.out.println();
//            System.out.println(i);
//        }
//        System.out.println(k);
//        String strVectorFile = "D:\\其他\\hesu\\polcon202004170900.tif";
//        String txtArrayFile = "D:\\其他\\hesu\\polcon202004170900.dat";
//        createTif(strVectorFile,txtArrayFile);
        createTifs();
    }

    public static void createTifs(){
        String dirs="D:\\其他\\hesu\\202004150900扩散96_145";
        File file=new File(dirs);
        if(file.isDirectory()){
            File[] files=file.listFiles();
            for (int i=0;i<files.length;i++){
                if(files[i].getName().endsWith("dat")){
                    String tifPath=files[i].getParent()+"/tifs/"+files[i].getName().replace(".dat",".tif");

                    createTif(tifPath,files[i].getAbsolutePath());
                }
            }
        }
    }

    
    public static  void createTif(String strVectorFile,String txtArrayFile) {

        gdal.AllRegister();
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
        //gdal.SetConfigOption("SHAPE_ENCODING","CP936");

        SpatialReference ref = new SpatialReference();
       // 只有这个投影支持输出geotiff OGC WKT   错误参数：WGS84
        ref.SetWellKnownGeogCS("WGS84");
//        ref.SetGeocCS("WGS84");

        String[] defWkt = null;
        ref.ExportToWkt();// 可配置String数组 defWkt
//        if(true)return;
        //驱动名称
        String strDriverName = "GTiff";
        org.gdal.gdal.Driver oDriver = gdal.GetDriverByName(strDriverName);
        if (oDriver == null) {
            System.out.println(strDriverName + " 驱动不可用！\n");
            return;
        }
        // @param数 (name, xsize, ysize, bands, java.lang.String[] options)
        Dataset dataset = oDriver.Create(strVectorFile, width, height, 1, gdalconst.GDT_Float32);
        dataset.SetGeoTransform(argin);
        dataset.SetSpatialRef(ref);
        dataset.SetMetadataItem("COMPRESSION", "LZW", "IMAGE_STRUCTURE");
        // @param int xoff(偏移量), int yoff, int xsize, int ysize, int buf_type, byte[] array
        Band band = dataset.GetRasterBand(1);// 波段  (色彩)
        double[][] txtArray = Utils.readTxtToArray(txtArrayFile);
        float[] arr = new float[width * height];
        int c = 0;
        for (int j2 = (height-1); j2 >=0; j2--) {
            for (int j = 0; j <width; j++) {
                if(txtArray[j][j2]>0){
                    arr[c] = (float) txtArray[j][j2];
                }else{
//                    arr[c] =null;
                }
                c++;
            }
        }

        // ReadRaster​(int xoff, int yoff, int xsize, int ysize, int buf_type, float[] array)
        // 参数说明： 起始x 起始y x数量(行) y数量(列) 数据类型 数组
        band.SetNoDataValue(0);
        band.WriteRaster(0, 0, width, height, gdalconst.GDT_Float32, arr);
        dataset.delete();
        oDriver.delete();
    }

}
